package com.asia5b.a5mall.middleware.api

import com.asia5b.a5mall.middleware.model.base.ResultModel
import com.asia5b.a5mall.middleware.model.order.AftersaleDetail2Model
import com.asia5b.a5mall.middleware.model.order.AftersaleModel
import com.asia5b.a5mall.middleware.model.order.OrderAfterSaleDetailModel
import io.reactivex.Observable
import okhttp3.ResponseBody
import retrofit2.http.*

/**
 * Created by zhangyuncai on 2019/12/21.
 * @Note   售后相关API
 */
interface AfterSaleApi  {

    /**
     * @api
     * 买家申请退款
     * @param order_sn 订单编号
     * @param sku_id 货品id
     * @param return_num 退货数量
     * @param refund_reason 退款原因
     * @suppress account_type 账号类型 支付宝:ALIPAY, 微信:WEIXINPAY, 银行转账:BANKTRANSFER
     * @suppress return_account 退款账号
     * @param customer_remark 客户备注
     * @suppress bank_name 银行名称
     * @suppress bank_account_number 银行账号
     * @suppress bank_account_name 银行开户名
     * @suppress bank_deposit_name 银行开户行
     */
    @POST("after-sales/refunds/apply")
    fun applyRefunds(@QueryMap map :HashMap<String,Any>):Observable<ResponseBody>


    /**
     * @api
     * 买家查看退款(货)详细
     * @param sn 退款(货)编号
     */
    @GET("after-sales/refund/{sn}")
    fun getAfterSaleDetail(@Path("sn") sn :String):Observable<AftersaleDetail2Model>


    /**
     * @api
     * 退款申请数据获取
     * @param sku_id 货品id
     * @param order_sn 订单号
     */
    @GET("after-sales/refunds/apply/{order_sn}")
    fun getRefundData(@Path("order_sn") orderSn :String ,@QueryMap map : HashMap<String,Any>):Observable<OrderAfterSaleDetailModel>


    /**
     * @api
     * 买家申请退货
     * @param order_sn 订单编号
     * @param sku_id 货品id
     * @param return_num 退货数量
     * @param refund_reason 退款原因
     * @param customer_remark 客户备注
     * @suppress account_type 账号类型 支付宝:ALIPAY, 微信:WEIXINPAY, 银行转账:BANKTRANSFER
     * @suppress return_account 退款账号
     * @suppress bank_name 银行名称
     * @suppress bank_account_number 银行账号
     * @suppress bank_account_name 银行开户名
     * @suppress bank_deposit_name 银行开户行
     */
    @POST("after-sales/return-goods/apply")
    fun applyReturnGoods(@QueryMap map :HashMap<String,Any>):Observable<ResponseBody>


    /**
     * @api
     * 买家查看退款(货)列表
     * @param pageNo 页码
     * @param pageSize 分页数
     * @suppress startTime 申请时间-开始
     * @suppress endTime 申请时间-结束
     * @suppress refundStatus 售后状态
     */
    @GET("after-sales/refunds")
    fun getRefundsList(@Query("page_no") pageNo :Int,@Query("page_size") pageSize :Int): Observable<ResultModel<ArrayList<AftersaleModel>>>


    /**
     * @api
     * 买家对已付款的订单取消操作
     * @param order_sn 订单编号
     * @param refund_reason  退款原因
     * @suppress account_type  账号类型 支付宝:ALIPAY, 微信:WEIXINPAY, 银行转账:BANKTRANSFER
     * @suppress return_account  退款账号
     * @suppress customer_remark  客户备注
     * @suppress bank_name  银行名称
     * @suppress bank_account_number  银行账号
     * @suppress bank_account_name  银行开户名
     * @suppress bank_deposit_name  银行开户行
     */
    @POST("after-sales/refunds/cancel-order")
    fun cancelPaidOrder(
            @QueryMap map:MutableMap<String,Any>):Observable<ResponseBody>


    /**
     * @api
     * 买家取消退款或退货
     * @param orderSn 退款(货)编号
     */
    @GET("after-sales/cancelRefund/{sn}")
    fun cancelRefund(@Path("sn") orderSn :String):Observable<ResponseBody>


}